/* eslint-disable */
/**
 * 正则表达式校验类
 */

/**
 * 手机号验证
 * @param phone
 * @returns {boolean}
 */
export function checkPhone(phone) {
  let reg = new RegExp(/^1(3[0-9]|4[5,7]|5[0,1,2,3,5,6,7,8,9]|6[2,5,6,7]|7[0,1,6,7,8]|8[0-9]|9[1,8,9])\d{8}$/);
  return reg.test(phone);
}

/**
 * 身份证验证
 * @param idCard
 * @returns {boolean}
 */
export function checkIdCard(idCard) {
  let id1 = new RegExp(/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/);
  let id2 = new RegExp(/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/);
  return id1.test(idCard) || id2.test(idCard);
}

/**
 * Email检测
 * @param email
 * @returns {boolean}
 */
export function checkEmail(email) {
  let reg = new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/);
  return reg.test(email);
}

/**
 * 中文检测
 * @param str
 * @returns {boolean}
 */
export function checkChinese(str) {
  let reg = new RegExp(/^([\u4E00-\u9FA5])*$/);
  return reg.test(str);
}

/**
 * 数字检测
 * @param num
 * @returns {boolean}
 */
export function checkNum(num) {
  let reg = new RegExp(/^[0-9]*$/);
  return reg.test(num);
}

export function check(value, verify) {
  let reg = new RegExp(eval('/' + verify + '/'));
  return reg.test(value);
}

/**
 * url 检测
 */

export function checkUrl(value) {
  let reg = new RegExp(/(https?|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/);
  return reg.test(value)
}

/**
 * 银行卡号 验证
 * luhn校验规则：16位银行卡号（19位通用）:
 * 1.将未带校验位的 15（或18）位卡号从右依次编号 1 到 15（18），位于奇数位号上的数字乘以 2。
 * 2.将奇位乘积的个十位全部相加，再加上所有偶数位上的数字。
 * 3.将加法和加上校验位能被 10 整除。
 * bankno位银行卡号
 */
export function bankCardCheck(bankno){
  let lastNum=bankno.substr(bankno.length-1,1);//取出最后一位（与luhn进行比较）
  let first15Num=bankno.substr(0,bankno.length-1);//前15或18位
  let newArr=new Array();
  for(let i=first15Num.length-1;i>-1;i--){    //前15或18位倒序存进数组
      newArr.push(first15Num.substr(i,1));
  }
  let arrJiShu=new Array();  //奇数位*2的积 <9
  let arrJiShu2=new Array(); //奇数位*2的积 >9
  let arrOuShu=new Array();  //偶数位数组
  for(let j=0;j<newArr.length;j++){
      if((j+1)%2==1){//奇数位
          if(parseInt(newArr[j])*2<9)
              arrJiShu.push(parseInt(newArr[j])*2);
          else
              arrJiShu2.push(parseInt(newArr[j])*2);
      }
      else //偶数位
          arrOuShu.push(newArr[j]);
  }

  let jishu_child1=new Array();//奇数位*2 >9 的分割之后的数组个位数
  let jishu_child2=new Array();//奇数位*2 >9 的分割之后的数组十位数
  for(let h=0;h<arrJiShu2.length;h++){
      jishu_child1.push(parseInt(arrJiShu2[h])%10);
      jishu_child2.push(parseInt(arrJiShu2[h])/10);
  }
  let sumJiShu=0; //奇数位*2 < 9 的数组之和
  let sumOuShu=0; //偶数位数组之和
  let sumJiShuChild1=0; //奇数位*2 >9 的分割之后的数组个位数之和
  let sumJiShuChild2=0; //奇数位*2 >9 的分割之后的数组十位数之和
  let sumTotal=0;
  for(let m=0;m<arrJiShu.length;m++){
      sumJiShu=sumJiShu+parseInt(arrJiShu[m]);
  }
  for(let n=0;n<arrOuShu.length;n++){
      sumOuShu=sumOuShu+parseInt(arrOuShu[n]);
  }
  for(let p=0;p<jishu_child1.length;p++){
      sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]);
      sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]);
  }
  //计算总和
  sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);
  //计算luhn值
  let k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10;
  let luhn= 10-k;
  if(lastNum==luhn){
      return true;
  }
  else{
      return false;
  }
}
